package icu.shaoyayu.common.utll;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.*;

/**
 * @author shaoyayu
 * @date 2022/2/9
 * @apiNote
 */
@Data
@ApiModel("全局统一返回对象")
public class R<T> implements Serializable {

    @ApiModelProperty("请求是否成功")
    private Boolean ok;

    @ApiModelProperty("返回的状态码")
    private Integer code;

    @ApiModelProperty("返回的消息")
    private String msg;

    @ApiModelProperty("返回data的条目")
    private Integer count;

    @ApiModelProperty("返回消息的时间戳")
    private Long timestamp;

    @ApiModelProperty("返回的数据")
    private T data;

    public R<T> clone(){
        R outer = null;
        try {
            // 将该对象序列化成流,因为写在流里的是对象的一个拷贝，而原对象仍然存在于JVM里面。所以利用这个特性可以实现对象的深拷贝
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(this);
            // 将流序列化成对象
            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            outer = (R) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return outer;
    }

}
